﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common.MessageHandlers;

namespace Common
{
    /// <summary>
    /// Занимается отсылкой сообщений
    /// </summary>
    public class MessageProcessor
    {
        public MessageProcessor()
        {
        }


        /// <summary>
        /// Отсылается письмо
        /// </summary>
        /// <param name="messageBody"></param>
        /// <param name="emailAddresses"></param>
        public void ProcessSendMessage(string messageBody, string emailAddresses, string fromAddressName, string messageSubject, string fromAddress = null)
        {
            var messageHandler = new MailMessageToBossHandler();
            int countSend = messageHandler.MaxTryCount;
            // Отсылка писем происходит MaxTryCount раз или до тех пор, пока не получится отослать письмо
            while (countSend > 0)
            {
                try
                {
                    messageHandler.Handle(messageBody, emailAddresses, fromAddressName, messageSubject, fromAddress);
                    countSend = 0;
                }
                catch (Exception exc)
                {
                    countSend--;
                    if (countSend == 0)
                    {
                        // Не получилось ни разу отослать письмо. Необходимо либо логировать, либо выводить на экран ошибку
                        messageHandler.OnHandleError(messageBody, exc);
                        throw; // Ошибка "проталкивается" вверх для дальнейшего отображения на форме
                    }
                }
            }
        }


    }
}
